﻿using System.ComponentModel;

namespace MSAP.Framework
{
    /// <summary>
    /// Cette classe doit être derivé pour implementer un traitement long sans bloque l'IHM
    /// pendant le traitement
    /// </summary>
    public abstract class BackgroundWorkerProcess : BackgroundWorker 
    {
        public BackgroundWorkerProcess()
        {
            DoWork += new DoWorkEventHandler(DoIt);
            RunWorkerCompleted += new RunWorkerCompletedEventHandler(RunCompleted);
        }

        /// <summary>
        /// Checker permet de verifier que le traitement peu être lancer
        /// </summary>
        /// <returns>Retourne true si le traitement peut être lancé</returns>
        public abstract bool Check();

        /// <summary>
        /// Doit Implementé les action du traitement 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public abstract void DoIt(object sender, DoWorkEventArgs e);
        
        /// <summary>
        /// Doit Implementé les actions qui doivent être executer lorsque le traitement est terminer
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public abstract void RunCompleted(object sender, RunWorkerCompletedEventArgs e);

        protected delegate void SimpleDelegate();
    }
}
